function makeFn() {
  let msg = 'hello word'
  return function () {
    console.log(msg)
  }
}

// const fn = makeFn()
// fn()

function once(fn) {
  let done = false
  return function (...arg) {
    if (!done) {
      done = true
      fn(...arg)
    }
  }
}

let fn = once(function (money, name) {
  console.log(money, name)
})
fn(1, 'joe')
fn(12, 'joe')
fn(10, 'cheng')

// 使用高阶函数的意义：屏蔽细节，只需关注与我们的目标
// 高阶函数是用来抽象通用的问题
